﻿/** 实现了较为常用的接口的MyUI的子类,调用了CommonMacro类.且可以直接运行本文件

  By setycyas @2023-09-27
*/

/* 全局设定
*/
#Warn
#MaxThreadsPerHotkey 1
SetWorkingDir(A_ScriptDir)
#Include "..\Class\FaceDetector.2.ahk"
#Include "..\Class\CommonMacro.2.ahk"
#Include "..\Class\MyUI.2.ahk"
#Include "..\Class\MyEmu.2.ahk"
SendMode("Input")

/* 制作一个MyUI的子类,显示如何使用接口
*/
class CommonUI extends MyUI {

  DEFAULT_HOTKEYS := "~w,q,2,3,r,a,f"
  _fpsEdit := "" ;记录连发频率参数的文本框,输入0可变成单发
  _testEdit := "" ;测试参数输入框

  /* 重写接口
  */
  ;自定义gui组件标签页,增加一个连发延时
  _customGui(){
    this._myGui.Add("Text", "x+20 y+20 w100", "连发频率(0表示单发,不高于30):")
    this._fpsEdit := this._myGui.Add("Edit", "w100", 10)
    this._myGui.Add("Text", "w100", "测试参数:")
    this._testEdit := this._myGui.Add("Edit", "w100", "150,250")
  }
  ;提交数据后更新连发延时(0表示单发),保存测试参数到MyMacro类,首次提交数据时安装方向检测
  _onSubmitEnd(){
    local fps := Min(this._fpsEdit.Text, 30)
    if (fps > 0){
      this._macro.autoFireDelay := Max(Round(1000/fps)-this._macro.pressDuration, 20)
    } else {
      this._macro.autoFireDelay := 0
    }
    this._macro.testParams := StrSplit(this._testEdit.Text, ",")
    ;首次提交数据,安装方向检测和安装emu对应热键
    if (this._submitTimes == 0){
      this._macro._face.winTitle := this._winTitle
      this._macro._face.setup()
      MyEmu.setupHotkeys(this._exeComboBox.Text)
    }
  }

}

/* 直接运行本文件
*/
if (A_ScriptName == "CommonUI.2.ahk") {
  face := FaceDetector() ;方向检测对象
  macro := CommonMacro(face, ["x","e"]) ;宏对象,有界面时第二个参数可以随便写但长度不要小于2
  ;宏方案预设,用于菜单
  preset := Map("龙与地下城2", ["连发A", "下前A", "下上A", "A后防御", "下前B"],
  "恐龙快打", ["连发A", "下上A", "", "", "前冲A"])
  ;新建界面并设定
  ui := CommonUI("界面实例", macro ,preset)
  ui.setup()
}
